/*
 * Copyright (c) JoinQuant Development Team
 * Author: Huayong Kuang <kuanghuayong@joinquant.com>
 */

#ifndef QUANXI_SECURITY_H
#define QUANXI_SECURITY_H

#include <string>
#include <unordered_set>
#include <unordered_map>
#include "types.h"

using namespace std;

#define sec_set_t unordered_set<std::string>
#define sec_map_t unordered_map<string, Security>

class Security {
public:
    string code;          // 标的代码
    string type;          // 标的类型
    string name;          // 标的名称
    string shortName;     // 标的缩写简称
    string startDate;     // 标的上市日期
    string endDate;       // 标的退市日期
    string subtype;       // 标的子类型

    Security();
    ~Security();

    string id();   // 不带后缀的标的代码
    string str();  // 包含标的基本信息的字符串格式化显示

    // 获取所有标的信息
    static sec_map_t GetAllSecurities(const string types[], const string &date);

    // 获取所有标的 ID（不带后缀的标的代码）
    static sec_set_t GetAllSecurityIDs(const string types[], const string &date);

private:
    static void Process(void *data, int argc, char **argv, char **azColName){
};

#endif
